<?php

class Cash extends AppModel {

    var $name = 'Cash';
    //The Associations below have been created with all possible keys, those that are not needed can be removed

    var $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );
    var $hasMany = array(
        'CashMovement' => array(
            'className' => 'CashMovement',
            'foreignKey' => 'cash_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

    /**
     * Función que devuelve la caja del día actual, en caso de no existir una caja
     * para el día de hoy, primero la crea y luego la devuelve
     * @return type
     */
    function getActual() {

        //reviso si ya existe una caja para el día de hoy
        $cash = $this->find('first', array(
            'recursive' => -1,
            'conditions' => array(
                'Cash.date_open >' => date('Y-m-d 00:00:00'),
                'Cash.date_open <' => date('Y-m-d 23:59:59')
            )
                ));

        if (!empty($cash)) {
            return $cash;
        } else {
            //si no hay una caja para el día de hoy, voy a crear una
            $array_datos = array();
            $array_datos['user_id'] = $_SESSION['Auth']['User']['id'];
            //me fijo de arrancar la caja con el monto en que se cerró la caja anterior
            //entonces busco la última caja
            $cash_anterior = $this->find('first', array(
                'recursive' => -1,
                'order' => array('Cash.date_open' => 'DESC')
                    ));
            if (empty($cash_anterior)) {
                //si no había una caja creada, entonces arranco en cero
                $array_datos['open_amount'] = 0;
                $array_datos['actual_amount'] = 0;
            } else {
                //si encontró una caja
                $array_datos['open_amount'] = $cash_anterior['Cash']['actual_amount'];
                $array_datos['actual_amount'] = $cash_anterior['Cash']['actual_amount'];
            }
            $array_datos['date_open'] = date('Y-m-d H:i:s');
            $array_datos['date_close'] = NULL;

            //guardo la caja
            $this->create();
            $this->save($array_datos);
            $id = $this->id;

            //busco la caja para devolverla igual
            $cash = $this->find('first', array(
                'recursive' => -1,
                'conditions' => array(
                    'Cash.id' => $id
                )
                    ));

            return $cash;
        }
    }

    /**
     * Función que controla si se puede realizar una extracción de dinero de la caja
     * Controla que el monto a retirar sea menor o igual al monto actual de la caja
     * @param type $monto es el monto a retirar
     * @return boolean devuelve true si es posible retirar ese dinero, sino false
     */
    function controlarPago($monto) {
        $cash = $this->getActual();
        if ($cash['Cash']['actual_amount'] >= $monto) {
            //si puede pagar
            return true;
        } else {
            //no alcanza para pagar
            return false;
        }
    }

}
